package com.interview.a_多线程.a_实现线程.a_实现方式;
//        实现Runnable接口好在哪里？
//        1.解耦
//        从架构的角度来看 执行的任务（runnable） 应该是与线程无关
//        从代码架构角度：具体的任务（run方法）应该和“创建和运行线程的机制（Thread类）”解耦，用runnable对象可以实现解耦。
//
//        2.资源节约
//        新建Thread的损耗比较大（创建 启动 销毁）， 基于runnable 的 线程池等工具 可以降低资源的损耗
//        如果使用Runnable和线程池，就可以大大减小这样的损耗
//        使用继承Thread的方式的话，那么每次想新建一个任务，只能新建一个独立的线程，而这样做的损耗会比较大
//        （比如重头开始创建一个线程、执行完毕以后再销毁等。如果线程的实际工作内容，也就是run()函数里只是简单的打印一行文字的话，
//        那么可能线程的实际工作内容还不如损耗来的大）
//
//        3.可扩展性
//        java 不支持多继承
//        继承Thread类以后，由于Java语言不支持双继承，
//        这样就无法再继承其他的类，限制了可扩展性
//
//        本质
//        都是调用start() 然后执行 run（）方法
//        但是run的执行内容不同
//        实现runnable接口  run方法内会判断传入的 runnable 并执行runnable.run();
//        继承Thread类  会执行重写的run方法
//
//        两个方法同时调用时
//        因为重写的run方法，所以虽然runnable已经穿进去了，但是并不会执行.

/**
 * 根据最权威的Oracle官方文档描述
 * https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 * 实现线程的方式有两种
 * <p>
 * 方式一 :实现 Runnable接口 ，新建Thread类并传入 Runnable实例（target）
 */
public class RunnableRealize implements Runnable {

    @Override
    public void run() {
        System.out.println("方式一 :实现 Runnable接口 ，新建Thread类并传入 Runnable实例（target）");
    }

    public static void main(String[] args) {
        Thread thread = new Thread(new RunnableRealize());
        thread.start();
    }
}
